package com.asc {

/**
 * An identifiable element is one that can be selected from a collection of items of the same type.
 */
public interface Identifiable extends CommonObject {

  /**
   * Determine whether two elements are equal to each other. Should define a true equivalents relation,
   * that is
   * <ul>
   *  <li>reflexivity: a.equals(a) is always true</li>
   *  <li>symmetry: if a.equals(b) then b.equals(a)</li>
   *  <li>transitivity: if a.equals(b) and b.equals(c), then a.equals(c)</li>
   * </ul>
   * @param other the item to compare this to
   * @return
   */
  function equals(other:Identifiable) : Boolean;


  /**
   * Generate a hash-code identifier that will be used to identify this item.  Defaults to int(this)
   * @return
   */
  function hashCode() : int;
}
}